package cn.com.ccxe.dao.parser;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

/**
 * 数据库{@link ResultSet}解析接口。
 * @author hetao
 *
 * @param <E> POJO对象.
 */
public interface ResultSetParser<E> {

	/**
	 * 解析查询结果集{@link ResultSet}中的{@linkplain E}，并将解析出来的数据添加到{@link List}容器中。
	 * <br><br>
	 * <b>实现此方法，需遵循如下的约定。</b>
	 * <ol>
	 * 	<li>获取的参数还需参照SQL查询语句的顺序或列名进行解析。<br>
	 * 		比如:
	 * 		<br>SQL语句为<code>SELECT ID FROM TABLE<code>
	 * 		<br>JAVA解析代码就应为<code> ResultSet.getInt("ID")<code>
	 * 	<li>请使用泛型，确保类型安全。
	 * </ol>
	 * @param rs 结果集
	 * @return
	 * @throws SQLException
	 */
	public List<E> parse(ResultSet rs) throws SQLException;
	
	/**
	 * 解析查询结果集{@link ResultSet}中的{@linkplain E}，并根据解析出来的数据构建对象。
	 * 在调用此方法时，应确认{@link ResultSet}中有数据，在此不做检测。
	 * <br><br>
	 * <b>实现此方法，需遵循如下的约定。</b>
	 * <ol>
	 * 	<li>获取的参数还需参照SQL查询语句的顺序或列名进行解析。<br>
	 * 		比如:
	 * 		<br>SQL语句为<code>SELECT ID FROM TABLE<code>
	 * 		<br>JAVA解析代码就应为<code> ResultSet.getInt("ID")<code>
	 * 	<li>请使用泛型，确保类型安全。
	 * </ol>
	 * @param rs 结果集
	 * @return
	 * @throws SQLException
	 */
	public E parseObject(ResultSet rs) throws SQLException;
}
